package com.learning.spring.aop.advice.error;

import com.learning.spring.aop.advice.monitor.AopMonitor;
import org.springframework.aop.ThrowsAdvice;

import java.lang.reflect.Method;

/**
 * ClassName: ExceptionAdvice
 * Description: 异常Advice，实现 ThrowsAdvice 接口。
 * 1. 该接口是一个标签接口，没有定义任何方法，Spring 根据反射自行判断。
 * 2. 实现接口的格式固定，必须按照下面的格式定义Advice的方法；且该方法可以定义多个。
 * Date: 2019/4/21 15:40 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
public class ExceptionAdvice implements ThrowsAdvice {

    /**
     * 方法定义格式固定，方法名称为 afterThrowing ，参数定义如下（前三个参数集体可选）
     *
     * @param method
     * @param args
     * @param target
     * @param ex
     * @throws Exception
     */
    public void afterThrowing(Method method, Object[] args, Object target, Exception ex) throws Exception {
        System.out.println("method：" + method.getName());
        System.out.println("抛出异常" + ex.getMessage());
        AopMonitor.error();
    }

    /**
     * 方法可以定义多个（参数不同）
     *
     * @param ex
     * @throws Exception
     */
    public void afterThrowing(Exception ex) throws Exception {
        System.out.println("抛出异常" + ex.getMessage());
        AopMonitor.error();
    }
}